# --------------------------
# 1. 数字类型：存储单一数值信息
# --------------------------
# 整数：学号、年龄、课程学分
student_id = 2023001  # 学号（整数序号）
age = 20  # 年龄（计数）
math_credit = 3  # 数学学分（整数）

# 浮点数：成绩、身高
math_score = 92.5  # 数学成绩（小数精度）
english_score = 88.0  # 英语成绩
height = 1.78  # 身高（米）

# 布尔值：状态判断
is_active = True  # 是否为在读学生
has_scholarship = False  # 是否获得奖学金

# 复数：暂用于示例（实际学生管理中较少用到，此处模拟科研数据）
research_data = 2 + 3j  # 假设的实验数据


# --------------------------
# 2. 组合类型：存储多元素信息
# --------------------------
# 列表：存储有序、可修改的批量数据（成绩列表、选课列表）
scores = [math_score, english_score, 95.0]  # 成绩列表（可动态添加新成绩）
courses = ["高等数学", "大学英语", "Python编程"]  # 选课列表（可增删课程）

# 元组：存储固定结构数据（家庭住址、坐标等不可修改信息）
address = ("北京市", "海淀区", "中关村大街")  # 家庭住址（结构固定，不轻易修改）
login_time = (2023, 10, 30, 8, 30)  # 登录时间（年/月/日/时/分，不可变）

# 字典：存储键值映射的复杂信息（学生完整档案）
student = {
    "id": student_id,
    "name": "张三",
    "age": age,
    "height": height,
    "is_active": is_active,
    "scores": scores,  # 嵌套列表
    "courses": courses,  # 嵌套列表
    "address": address  # 嵌套元组
}

# 集合：存储无重复的标签、共同选课等
student_tags = {"大一", "计算机专业", "男生", "计算机专业"}  # 自动去重
other_student_courses = {"大学英语", "Python编程", "线性代数"}  # 其他学生的选课


# --------------------------
# 3. 数据类型的实际使用
# --------------------------
# （1）使用数字类型：计算平均分
average_score = sum(scores) / len(scores)
print(f"平均分：{average_score:.1f}")  # 输出：平均分：91.8

# （2）使用列表：添加新成绩和课程
scores.append(90.5)  # 新增物理成绩
courses.insert(1, "大学物理")  # 在第2个位置插入课程
print("更新后的课程：", courses)  # 输出：['高等数学', '大学物理', '大学英语', 'Python编程']

# （3）使用元组：解析地址信息
province, city, street = address
print(f"地址：{province}{city}{street}")  # 输出：地址：北京市海淀区中关村大街

# （4）使用字典：查询和修改学生信息
print(f"{student['name']}的年龄：{student['age']}")  # 输出：张三的年龄：20
student["has_scholarship"] = True  # 新增键值对（更新奖学金状态）

# （5）使用集合：查找共同选课
common_courses = set(courses) & other_student_courses
print("与其他学生的共同选课：", common_courses)  # 输出：{'大学英语', 'Python编程'}

# （6）使用布尔值：判断学生状态
if student["is_active"]:
    print(f"{student['name']}是在读学生")  # 输出：张三是在读学生